public class Bank implements Runnable {
    int money=200;
    public void setMoney(int n) {
        money=n;
    }
    public void run() {
        if(Thread.currentThread().getName().equals("会计"))
            saveOrTake(300);
        else if(Thread.currentThread().getName().equals("出纳"))
            saveOrTake(150);;
    }
    public synchronized void saveOrTake(int amount) { //存取方法
        if(Thread.currentThread().getName().equals("会计")) {
            for(int i=1;i<=3;i++) {
                money=money+amount/3;      //每存入amount/3，稍歇一下
                System.out.println(Thread.currentThread().getName()+
                        "存入"+amount/3+",帐上有"+money+"万,休息一会再存");
                try { Thread.sleep(1000);  //这时出纳仍不能使用saveOrTake方法
                }
                catch(InterruptedException e){}
            }
        }
        else if(Thread.currentThread().getName().equals("出纳")) {
            for(int i=1;i<=3;i++) { //出纳使用存取方法取出60
                money=money-amount/3;   //每取出amount/3，稍歇一下
                System.out.println(Thread.currentThread().getName()+
                        "取出"+amount/3+"帐上有"+money+"万,休息一会再取");
                try { Thread.sleep(1000);       //这时会计仍不能使用saveOrTake方法
                }
                catch(InterruptedException e){}
            }
        }
    }
}
